/*
 *  Open BEAGLE: A Generic Evolutionary Computation Framework in C++
 *  Copyright (C) 2001-2010 by Christian Gagne and Marc Parizeau
 *
 *  This library is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU Lesser General Public License as
 *  published by the Free Software Foundation, version 3 of the License.
 *
 *  This library is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 *  GNU Lesser General Public License and GNU General Public License for
 *  more details.
 *
 *  You should have received a copy of the GNU Lesser General Public
 *  License and GNU General Public License along with this library.
 *  If not, see <http://www.gnu.org/licenses/>.
 *
 *  Contact:
 *  Christian Gagne
 *  Laboratoire de vision et systemes numeriques
 *  Departement de genie electrique et de genie informatique
 *  Universite Laval, Quebec (Quebec), Canada  G1V 0A6
 *  http://vision.gel.ulaval.ca/~cgagne
 *  christian.gagne@gel.ulaval.ca
 *
 */

/*!
 *  \file   Beagle/EC/IndividualSizeFrequencyStatsOp.hpp
 *  \brief  Definition of the class IndividualSizeFrequencyStatsOp.
 *  \author Christian Gagne
 *  \author Marc Parizeau
 *  $Revision: 1.5 $
 *  $Date: 2007/08/08 19:26:44 $
 */

#ifndef Beagle_EC_IndividualSizeFrequencyStatsOp_hpp
#define Beagle_EC_IndividualSizeFrequencyStatsOp_hpp

#include "Beagle/Core.hpp"


namespace Beagle
{

namespace EC
{

/*!
 *  \class IndividualSizeFrequencyStatsOp Beagle/EC/IndividualSizeFrequencyStatsOp.hpp
 *    "Beagle/EC/IndividualSizeFrequencyStatsOp.hpp"
 *  \brief The individual size frequence usage statistics operator class. Report size frequency of
 *    the individuals.
 *  \ingroup EC
 *  \ingroup Op
 *  \ingroup FitStats
 */
class IndividualSizeFrequencyStatsOp : public Beagle::Operator
{

public:

	//! IndividualSizeFrequencyStatsOp allocator type.
	typedef Beagle::AllocatorT<IndividualSizeFrequencyStatsOp,Beagle::Operator::Alloc>
	Alloc;
	//! IndividualSizeFrequencyStatsOp handle type.
	typedef Beagle::PointerT<IndividualSizeFrequencyStatsOp,Beagle::Operator::Handle>
	Handle;
	//! IndividualSizeFrequencyStatsOp bag type.
	typedef Beagle::ContainerT<IndividualSizeFrequencyStatsOp,Beagle::Operator::Bag>
	Bag;

	explicit IndividualSizeFrequencyStatsOp(std::string inName="IndividualSizeFrequencyStatsOp");
	virtual ~IndividualSizeFrequencyStatsOp()
	{ }

	virtual void operate(Beagle::Deme& ioDeme, Beagle::Context& ioContext);

};

}

}

#endif // Beagle_EC_IndividualSizeFrequencyStatsOp_hpp
